#include "bsp/bsp.h"
#include "gpio.h"
#include "version.h"

void SystemClock_Config(void);
void MX_IWDG_Init(void);
void MX_DMA_Init(void);
void HALL_IrqHandler(void);
void board_gpio_init(void);

static void system_init(void) {
	HAL_Init();
	MX_IWDG_Init();
	SystemClock_Config();
	SystemCoreClockUpdate();
}

static void board_init(void) {
	cpu_ticks_enable();
	board_gpio_init();
}

void bsp_init(void) {
	system_init();
	board_init();
}


void board_gpio_init(void) {
	gpio_init(PIO(PORTA, PIN15), GPIO_MODE_INPUT, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW);
	gpio_init(PIO(PORTA, PIN0), GPIO_MODE_INPUT, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW);
}


void led_green_on(bool on) {
	if (!on){
		gpio_init(PIO(PORTA, PIN0), GPIO_MODE_INPUT, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW);
	}else {
		gpio_write(PIO(PORTA, PIN0), false);
		gpio_init(PIO(PORTA, PIN0), GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW);
	}
}

void led_blue_on(bool on) {
	if (!on){
		gpio_init(PIO(PORTA, PIN15), GPIO_MODE_INPUT, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW);
	}else {
		gpio_write(PIO(PORTA, PIN15), false);
		gpio_init(PIO(PORTA, PIN15), GPIO_MODE_OUTPUT_PP, GPIO_NOPULL, GPIO_SPEED_FREQ_LOW);
	}}

void Error_Handler(void) {
}